#include <bits/stdc++.h>

using namespace std;

//adjacent matrix
// vector<vector<int>> result;
// vector<int> path;

// void dfs(vector<vector<int>>& graph,int x,int n)
// {
//     if(x==n)
//     {
//         result.push_back(path);
//         return;
//     }
//     for(int i=1;i<=n;i++)
//     {
//         if(graph[x][i]==1)
//         {
//             path.push_back(i);
//             dfs(graph,i,n);
//             path.pop_back();
//         }
//     }
// }

// int main()
// {
//     int n,m,s,t;
//     cin>>n>>m;
//     vector<vector<int>> graph(n+1,vector<int>(n+1));
//     while(m--)
//     {
//         cin>>s>>t;
//         graph[s][t]=1;
//     }
//     path.push_back(1);
//     dfs(graph,1,n);
//     if(result.size()==0)
//     {
//         cout<<-1;
//     }
//     for(auto vec:result)
//     {
//         for(size_t i=0;i<vec.size()-1;i++)
//         {
//             cout<<vec[i]<<" ";
//         }
//         cout<<vec[vec.size()-1]<<endl;
//     }
//     return 0;
// }

//adjacent list
vector<vector<int>> result;
vector<int> path;

void dfs(vector<list<int>>& graph,int x,int n)
{
    if(x==n)
    {
        result.push_back(path);
        return;
    }
    for(int i:graph[x]) 
    {
        path.push_back(i);
        dfs(graph,i,n);
        path.pop_back();
    }
}

int main()
{
    int n,m,s,t;
    cin>>n>>m;
    vector<list<int>> graph(n+1);
    while(m--)
    {
        cin>>s>>t;
        graph[s].push_back(t);
    }
    path.push_back(1);
    dfs(graph,1,n);
    if(result.size()==0)
    {
        cout<<-1;
    }
    for(auto vec:result)
    {
        for(size_t i=0;i<vec.size()-1;i++)
        {
            cout<<vec[i]<<" ";
        }
        cout<<vec[vec.size()-1]<<endl;
    }
    return 0;
}